home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / eprom.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  18KB  |  601 lines

  1. /***************************************************************************
  2.  
  3. EPRoM Memory Map
  4. ----------------
  5.  
  6. driver by Aaron Giles
  7.  
  8.  
  9. EPRoM 68010 MEMORY MAP
  10.  
  11. Program ROM             000000-05FFFF   R    D15-D0
  12. Program ROM shared      060000-07FFFF   R    D15-D0
  13. Program ROM             080000-09FFFF   R    D15-D0
  14.  
  15. EEPROM                  0E0001-0E0FFF  R/W   D7-D0    (odd bytes only)
  16. Program RAM             160000-16FFFF  R/W   D15-D0
  17. UNLOCK EEPROM           1Fxxxx          W
  18.  
  19. Player 1 Input (left)   260000          R    D11-D8 Active lo
  20. Player 2 Input (right)  260010          R    D11-D8 Active lo
  21.       D8:    start
  22.       D9:    fire
  23.       D10:   spare
  24.       D11:   duck
  25.  
  26. VBLANK                  260010          R    D0 Active lo
  27. Self-test                               R    D1 Active lo
  28. Input buffer full (@260030)             R    D2 Active lo
  29. Output buffer full (@360030)            R    D3 Active lo
  30. ADEOC, end of conversion                R    D4 Active hi
  31.  
  32. ADC0, analog port       260020          R    D0-D7
  33. ADC1                    260022          R    D0-D7
  34. ADC2                    260024          R    D0-D7
  35. ADC3                    260026          R    D0-D7
  36.  
  37. Read sound processor    260030          R    D0-D7
  38.  
  39. Watch Dog               2E0000          W    xx        (128 msec. timeout)
  40.  
  41. VBLANK Interrupt ack.   360000          W    xx
  42.  
  43. Video off               360010          W    D5 (active hi)
  44. Video intensity                         W    D1-D4 (0=full on)
  45. EXTRA cpu reset                         W    D0 (lo to reset)
  46.  
  47. Sound processor reset   360020          W    xx
  48.  
  49. Write sound processor   360030          W    D0-D7
  50.  
  51. Color RAM Alpha         3E0000-3E01FF  R/W   D15-D0
  52. Color RAM Motion Object 3E0200-3E03FF  R/W   D15-D0
  53. Color RAM Playfield     3E0400-3E07FE  R/W   D15-D0
  54. Color RAM STAIN         3E0800-3E0FFE  R/W   D15-D0
  55.  
  56. Playfield Picture RAM   3F0000-3F1FFF  R/W   D15-D0
  57. Motion Object RAM       3F2000-3F3FFF  R/W   D15-D0
  58. Alphanumerics RAM       3F4000-3F4EFF  R/W   D15-D0
  59. Scroll and MOB config   3F4F00-3F4F70  R/W   D15-D0
  60. SLIP pointers           3F4F80-3F4FFF  R/W   D9-D0
  61. Working RAM             3F5000-3F7FFF  R/W   D15-D0
  62. Playfield palette RAM   3F8000-3F9FFF  R/W   D11-D8
  63.  
  64. -----------------------------------------------------------
  65.  
  66. EPRoM EXTRA 68010 MEMORY MAP
  67.  
  68. Program ROM             000000-05FFFF   R    D15-D0
  69. Program ROM shared      060000-07FFFF   R    D15-D0
  70.  
  71. Program RAM             160000-16FFFF  R/W   D15-D0
  72.  
  73. Player 1 Input (left)   260000          R    D11-D8 Active lo
  74. Player 2 Input (right)  260010          R    D11-D8 Active lo
  75.       D8:    start
  76.       D9:    fire
  77.       D10:   spare
  78.       D11:   duck
  79.  
  80. VBLANK                  260010          R    D0 Active lo
  81. Self-test                               R    D1 Active lo
  82. Input buffer full (@260030)             R    D2 Active lo
  83. Output buffer full (@360030)            R    D3 Active lo
  84. ADEOC, end of conversion                R    D4 Active hi
  85.  
  86. ADC0, analog port       260020          R    D0-D7
  87. ADC1                    260022          R    D0-D7
  88. ADC2                    260024          R    D0-D7
  89. ADC3                    260026          R    D0-D7
  90.  
  91. Read sound processor    260030          R    D0-D7
  92.  
  93. VBLANK Interrupt ack.   360000          W    xx
  94.  
  95. Video off               360010          W    D5 (active hi)
  96. Video intensity                         W    D1-D4 (0=full on)
  97. EXTRA cpu reset                         W    D0 (lo to reset)
  98.  
  99. Sound processor reset   360020          W    xx
  100.  
  101. Write sound processor   360030          W    D0-D7
  102.  
  103. ****************************************************************************/
  104.  
  105. #include "driver.h"
  106. #include "machine/atarigen.h"
  107. #include "sndhrdw/atarijsa.h"
  108. #include "vidhrdw/generic.h"
  109.  
  110.  
  111. extern UINT8 *eprom_playfieldpalram;
  112. extern size_t eprom_playfieldpalram_size;
  113.  
  114. WRITE_HANDLER( eprom_latch_w );
  115. WRITE_HANDLER( eprom_playfieldram_w );
  116. WRITE_HANDLER( eprom_playfieldpalram_w );
  117.  
  118. int eprom_vh_start(void);
  119. void eprom_vh_stop(void);
  120. void eprom_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  121.  
  122. void eprom_scanline_update(int scanline);
  123.  
  124.  
  125. static UINT8 *sync_data;
  126.  
  127.  
  128. /*************************************
  129.  *
  130.  *    Initialization
  131.  *
  132.  *************************************/
  133.  
  134. static void update_interrupts(void)
  135. {
  136.     int newstate = 0;
  137.     int newstate2 = 0;
  138.  
  139.     if (atarigen_video_int_state)
  140.         newstate |= 4, newstate2 |= 4;
  141.     if (atarigen_sound_int_state)
  142.         newstate |= 6;
  143.  
  144.     if (newstate)
  145.         cpu_set_irq_line(0, newstate, ASSERT_LINE);
  146.     else
  147.         cpu_set_irq_line(0, 7, CLEAR_LINE);
  148.  
  149.     if (newstate2)
  150.         cpu_set_irq_line(1, newstate2, ASSERT_LINE);
  151.     else
  152.         cpu_set_irq_line(1, 7, CLEAR_LINE);
  153. }
  154.  
  155.  
  156. static void init_machine(void)
  157. {
  158.     atarigen_eeprom_reset();
  159.     atarigen_interrupt_reset(update_interrupts);
  160.     atarigen_scanline_timer_reset(eprom_scanline_update, 8);
  161.     atarijsa_reset();
  162. }
  163.  
  164.  
  165.  
  166. /*************************************
  167.  *
  168.  *    I/O handling
  169.  *
  170.  *************************************/
  171.  
  172. static READ_HANDLER( special_port1_r )
  173. {
  174.     int result = input_port_1_r(offset);
  175.  
  176.     if (atarigen_sound_to_cpu_ready) result ^= 0x0004;
  177.     if (atarigen_cpu_to_sound_ready) result ^= 0x0008;
  178.     result ^= 0x0010;
  179.  
  180.     return result;
  181. }
  182.  
  183.  
  184. static READ_HANDLER( adc_r )
  185. {
  186.     static int last_offset;
  187.     int result = readinputport(2 + ((last_offset / 2) & 3));
  188.     last_offset = offset;
  189.     return result;
  190. }
  191.  
  192.  
  193.  
  194. /*************************************
  195.  *
  196.  *    Latch write handler
  197.  *
  198.  *************************************/
  199.  
  200. WRITE_HANDLER( eprom_latch_w )
  201. {
  202.     (void)offset;
  203.  
  204.     /* reset extra CPU */
  205.     if (!(data & 0x00ff0000))
  206.     {
  207.         if (data & 1)
  208.             cpu_set_reset_line(1,CLEAR_LINE);
  209.         else
  210.             cpu_set_reset_line(1,ASSERT_LINE);
  211.     }
  212. }
  213.  
  214.  
  215.  
  216. /*************************************
  217.  *
  218.  *    Synchronization
  219.  *
  220.  *************************************/
  221.  
  222. static READ_HANDLER( sync_r )
  223. {
  224.     return READ_WORD(&sync_data[offset]);
  225. }
  226.  
  227.  
  228. static WRITE_HANDLER( sync_w )
  229. {
  230.     int oldword = READ_WORD(&sync_data[offset]);
  231.     int newword = COMBINE_WORD(oldword, data);
  232.     WRITE_WORD(&sync_data[offset], newword);
  233.     if ((oldword & 0xff00) != (newword & 0xff00))
  234.         cpu_yield();
  235. }
  236.  
  237.  
  238.  
  239. /*************************************
  240.  *
  241.  *    Main CPU memory handlers
  242.  *
  243.  *************************************/
  244.  
  245. static struct MemoryReadAddress main_readmem[] =
  246. {
  247.     { 0x000000, 0x09ffff, MRA_ROM },
  248.     { 0x0e0000, 0x0e0fff, atarigen_eeprom_r },
  249.     { 0x16cc00, 0x16cc01, sync_r },
  250.     { 0x160000, 0x16ffff, MRA_BANK1 },
  251.     { 0x260000, 0x26000f, input_port_0_r },
  252.     { 0x260010, 0x26001f, special_port1_r },
  253.     { 0x260020, 0x26002f, adc_r },
  254.     { 0x260030, 0x260031, atarigen_sound_r },
  255.     { 0x3e0000, 0x3e0fff, paletteram_word_r },
  256.     { 0x3f0000, 0x3f1fff, MRA_BANK2 },
  257.     { 0x3f2000, 0x3f3fff, MRA_BANK3 },
  258.     { 0x3f4000, 0x3f4fff, MRA_BANK4 },
  259.     { 0x3f5000, 0x3f7fff, MRA_BANK5 },
  260.     { 0x3f8000, 0x3f9fff, MRA_BANK6 },
  261.     { -1 }  /* end of table */
  262. };
  263.  
  264.  
  265. static struct MemoryWriteAddress main_writemem[] =
  266. {
  267.     { 0x000000, 0x09ffff, MWA_ROM },
  268.     { 0x0e0000, 0x0e0fff, atarigen_eeprom_w, &atarigen_eeprom, &atarigen_eeprom_size },
  269.     { 0x16cc00, 0x16cc01, sync_w, &sync_data },
  270.     { 0x160000, 0x16ffff, MWA_BANK1 },
  271.     { 0x1f0000, 0x1fffff, atarigen_eeprom_enable_w },
  272.     { 0x2e0000, 0x2e0001, watchdog_reset_w },
  273.     { 0x360000, 0x360001, atarigen_video_int_ack_w },
  274.     { 0x360010, 0x360011, eprom_latch_w },
  275.     { 0x360020, 0x360021, atarigen_sound_reset_w },
  276.     { 0x360030, 0x360031, atarigen_sound_w },
  277.     { 0x3e0000, 0x3e0fff, paletteram_IIIIRRRRGGGGBBBB_word_w, &paletteram },
  278.     { 0x3f0000, 0x3f1fff, eprom_playfieldram_w, &atarigen_playfieldram, &atarigen_playfieldram_size },
  279.     { 0x3f2000, 0x3f3fff, MWA_BANK3, &atarigen_spriteram, &atarigen_spriteram_size },
  280.     { 0x3f4000, 0x3f4fff, MWA_BANK4, &atarigen_alpharam, &atarigen_alpharam_size },
  281.     { 0x3f5000, 0x3f7fff, MWA_BANK5 },
  282.     { 0x3f8000, 0x3f9fff, eprom_playfieldpalram_w, &eprom_playfieldpalram, &eprom_playfieldpalram_size },
  283.     { -1 }  /* end of table */
  284. };
  285.  
  286.  
  287.  
  288. /*************************************
  289.  *
  290.  *    Extra CPU memory handlers
  291.  *
  292.  *************************************/
  293.  
  294. static struct MemoryReadAddress extra_readmem[] =
  295. {
  296.     { 0x000000, 0x07ffff, MRA_ROM },
  297.     { 0x16cc00, 0x16cc01, sync_r },
  298.     { 0x160000, 0x16ffff, MRA_BANK1 },
  299.     { 0x260000, 0x26000f, input_port_0_r },
  300.     { 0x260010, 0x26001f, special_port1_r },
  301.     { 0x260020, 0x26002f, adc_r },
  302.     { 0x260030, 0x260031, atarigen_sound_r },
  303.     { -1 }  /* end of table */
  304. };
  305.  
  306.  
  307. static struct MemoryWriteAddress extra_writemem[] =
  308. {
  309.     { 0x000000, 0x07ffff, MWA_ROM },
  310.     { 0x16cc00, 0x16cc01, sync_w, &sync_data },
  311.     { 0x160000, 0x16ffff, MWA_BANK1 },
  312.     { 0x360000, 0x360001, atarigen_video_int_ack_w },
  313.     { 0x360010, 0x360011, eprom_latch_w },
  314.     { 0x360020, 0x360021, atarigen_sound_reset_w },
  315.     { 0x360030, 0x360031, atarigen_sound_w },
  316.     { -1 }  /* end of table */
  317. };
  318.  
  319.  
  320.  
  321. /*************************************
  322.  *
  323.  *    Port definitions
  324.  *
  325.  *************************************/
  326.  
  327. INPUT_PORTS_START( eprom )
  328.     PORT_START        /* 26000 */
  329.     PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED )
  330.     PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
  331.     PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
  332.     PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
  333.     PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED )
  334.     PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER1 )
  335.     PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED )
  336.  
  337.     PORT_START        /* 26010 */
  338.     PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_VBLANK )
  339.     PORT_SERVICE( 0x0002, IP_ACTIVE_LOW )
  340.     PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED )    /* Input buffer full (@260030) */
  341.     PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) /* Output buffer full (@360030) */
  342.     PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) /* ADEOC, end of conversion */
  343.     PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNUSED )
  344.     PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 )
  345.     PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  346.     PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  347.     PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED )
  348.     PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
  349.     PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED )
  350.  
  351.     PORT_START    /* ADC0 @ 0x260020 */
  352.     PORT_ANALOG( 0x00ff, 0x0080, IPT_AD_STICK_Y | IPF_PLAYER1, 100, 10, 0x10, 0xf0 )
  353.     PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
  354.  
  355.     PORT_START    /* ADC1 @ 0x260022 */
  356.     PORT_ANALOG( 0x00ff, 0x0080, IPT_AD_STICK_X | IPF_REVERSE | IPF_PLAYER1, 100, 10, 0x10, 0xf0 )
  357.     PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
  358.  
  359.     PORT_START    /* ADC0 @ 0x260024 */
  360.     PORT_ANALOG( 0x00ff, 0x0080, IPT_AD_STICK_Y | IPF_PLAYER2, 100, 10, 0x10, 0xf0 )
  361.     PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
  362.  
  363.     PORT_START    /* ADC1 @ 0x260026 */
  364.     PORT_ANALOG( 0x00ff, 0x0080, IPT_AD_STICK_X | IPF_REVERSE | IPF_PLAYER2, 100, 10, 0x10, 0xf0 )
  365.     PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
  366.  
  367.     JSA_I_PORT    /* audio board port */
  368. INPUT_PORTS_END
  369.  
  370.  
  371.  
  372. /*************************************
  373.  *
  374.  *    Graphics definitions
  375.  *
  376.  *************************************/
  377.  
  378. static struct GfxLayout anlayout =
  379. {
  380.     8,8,    /* 8*8 chars */
  381.     1024,    /* 1024 chars */
  382.     2,        /* 2 bits per pixel */
  383.     { 0, 4 },
  384.     { 0, 1, 2, 3, 8, 9, 10, 11 },
  385.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
  386.     8*16    /* every char takes 16 consecutive bytes */
  387. };
  388.  
  389.  
  390. static struct GfxLayout pfmolayout =
  391. {
  392.     8,8,    /* 8*8 sprites */
  393.     32768,    /* 32768 of them */
  394.     4,        /* 4 bits per pixel */
  395.     { 0*8*0x40000, 1*8*0x40000, 2*8*0x40000, 3*8*0x40000 },
  396.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  397.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  398.     8*8    /* every sprite takes 8 consecutive bytes */
  399. };
  400.  
  401.  
  402. static struct GfxDecodeInfo gfxdecodeinfo[] =
  403. {
  404.     { REGION_GFX1, 0, &pfmolayout,  256, 32 },    /* sprites & playfield */
  405.     { REGION_GFX2, 0, &anlayout,      0, 64 },    /* characters 8x8 */
  406.     { -1 } /* end of array */
  407. };
  408.  
  409.  
  410.  
  411. /*************************************
  412.  *
  413.  *    Machine driver
  414.  *
  415.  *************************************/
  416.  
  417. static struct MachineDriver machine_driver_eprom =
  418. {
  419.     /* basic machine hardware */
  420.     {
  421.         {
  422.             CPU_M68000,
  423.             ATARI_CLOCK_14MHz/2,
  424.             main_readmem,main_writemem,0,0,
  425.             atarigen_video_int_gen,1
  426.         },
  427.         {
  428.             CPU_M68000,
  429.             ATARI_CLOCK_14MHz/2,
  430.             extra_readmem,extra_writemem,0,0,
  431.             ignore_interrupt,1
  432.         },
  433.         JSA_I_CPU
  434.     },
  435.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  436.     10,
  437.     init_machine,
  438.  
  439.     /* video hardware */
  440.     42*8, 30*8, { 0*8, 42*8-1, 0*8, 30*8-1 },
  441.     gfxdecodeinfo,
  442.     2048, 2048,
  443.     0,
  444.  
  445.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE | VIDEO_UPDATE_BEFORE_VBLANK,
  446.     0,
  447.     eprom_vh_start,
  448.     eprom_vh_stop,
  449.     eprom_vh_screenrefresh,
  450.  
  451.     /* sound hardware */
  452.     JSA_I_MONO_WITH_SPEECH,
  453.  
  454.     atarigen_nvram_handler
  455. };
  456.  
  457.  
  458.  
  459. /*************************************
  460.  *
  461.  *    ROM decoding
  462.  *
  463.  *************************************/
  464.  
  465. static void rom_decode(void)
  466. {
  467.     int i;
  468.  
  469.     /* invert the graphics bits on the playfield and motion objects */
  470.     for (i = 0; i < memory_region_length(REGION_GFX1); i++)
  471.         memory_region(REGION_GFX1)[i] ^= 0xff;
  472.  
  473.     /* copy the shared ROM from region 0 to region 1 */
  474.     memcpy(&memory_region(REGION_CPU2)[0x60000], &memory_region(REGION_CPU1)[0x60000], 0x20000);
  475. }
  476.  
  477.  
  478.  
  479. /*************************************
  480.  *
  481.  *    ROM definition(s)
  482.  *
  483.  *************************************/
  484.  
  485. ROM_START( eprom )
  486.     ROM_REGION( 0xa0000, REGION_CPU1 )    /* 10*64k for 68000 code */
  487.     ROM_LOAD_EVEN( "136069.50a",   0x00000, 0x10000, 0x08888dec )
  488.     ROM_LOAD_ODD ( "136069.40a",   0x00000, 0x10000, 0x29cb1e97 )
  489.     ROM_LOAD_EVEN( "136069.50b",   0x20000, 0x10000, 0x702241c9 )
  490.     ROM_LOAD_ODD ( "136069.40b",   0x20000, 0x10000, 0xfecbf9e2 )
  491.     ROM_LOAD_EVEN( "136069.50d",   0x40000, 0x10000, 0x0f2f1502 )
  492.     ROM_LOAD_ODD ( "136069.40d",   0x40000, 0x10000, 0xbc6f6ae8 )
  493.     ROM_LOAD_EVEN( "136069.40k",   0x60000, 0x10000, 0x130650f6 )
  494.     ROM_LOAD_ODD ( "136069.50k",   0x60000, 0x10000, 0x1da21ed8 )
  495.  
  496.     ROM_REGION( 0x80000, REGION_CPU2 )    /* 8*64k for 68000 code */
  497.     ROM_LOAD_EVEN( "136069.10s",   0x00000, 0x10000, 0xdeff6469 )
  498.     ROM_LOAD_ODD ( "136069.10u",   0x00000, 0x10000, 0x5d7afca2 )
  499.  
  500.     ROM_REGION( 0x14000, REGION_CPU3 )    /* 64k + 16k for 6502 code */
  501.     ROM_LOAD( "136069.7b",    0x10000, 0x4000, 0x86e93695 )
  502.     ROM_CONTINUE(             0x04000, 0xc000 )
  503.  
  504.     ROM_REGION( 0x100000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  505.     ROM_LOAD( "136069.47s",   0x00000, 0x10000, 0x0de9d98d )
  506.     ROM_LOAD( "136069.43s",   0x10000, 0x10000, 0x8eb106ad )
  507.     ROM_LOAD( "136069.38s",   0x20000, 0x10000, 0xbf3d0e18 )
  508.     ROM_LOAD( "136069.32s",   0x30000, 0x10000, 0x48fb2e42 )
  509.     ROM_LOAD( "136069.76s",   0x40000, 0x10000, 0x602d939d )
  510.     ROM_LOAD( "136069.70s",   0x50000, 0x10000, 0xf6c973af )
  511.     ROM_LOAD( "136069.64s",   0x60000, 0x10000, 0x9cd52e30 )
  512.     ROM_LOAD( "136069.57s",   0x70000, 0x10000, 0x4e2c2e7e )
  513.     ROM_LOAD( "136069.47u",   0x80000, 0x10000, 0xe7edcced )
  514.     ROM_LOAD( "136069.43u",   0x90000, 0x10000, 0x9d3e144d )
  515.     ROM_LOAD( "136069.38u",   0xa0000, 0x10000, 0x23f40437 )
  516.     ROM_LOAD( "136069.32u",   0xb0000, 0x10000, 0x2a47ff7b )
  517.     ROM_LOAD( "136069.76u",   0xc0000, 0x10000, 0xb0cead58 )
  518.     ROM_LOAD( "136069.70u",   0xd0000, 0x10000, 0xfbc3934b )
  519.     ROM_LOAD( "136069.64u",   0xe0000, 0x10000, 0x0e07493b )
  520.     ROM_LOAD( "136069.57u",   0xf0000, 0x10000, 0x34f8f0ed )
  521.  
  522.     ROM_REGION( 0x04000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  523.     ROM_LOAD( "1360691.25d",  0x00000, 0x04000, 0x409d818e )
  524. ROM_END
  525.  
  526. ROM_START( eprom2 )
  527.     ROM_REGION( 0xa0000, REGION_CPU1 )    /* 10*64k for 68000 code */
  528.     ROM_LOAD_EVEN( "1025.50a",   0x00000, 0x10000, 0xb0c9a476 )
  529.     ROM_LOAD_ODD ( "1024.40a",   0x00000, 0x10000, 0x4cc2c50c )
  530.     ROM_LOAD_EVEN( "1027.50b",   0x20000, 0x10000, 0x84f533ea )
  531.     ROM_LOAD_ODD ( "1026.40b",   0x20000, 0x10000, 0x506396ce )
  532.     ROM_LOAD_EVEN( "1029.50d",   0x40000, 0x10000, 0x99810b9b )
  533.     ROM_LOAD_ODD ( "1028.40d",   0x40000, 0x10000, 0x08ab41f2 )
  534.     ROM_LOAD_EVEN( "1033.40k",   0x60000, 0x10000, 0x395fc203 )
  535.     ROM_LOAD_ODD ( "1032.50k",   0x60000, 0x10000, 0xa19c8acb )
  536.     ROM_LOAD_EVEN( "1037.50e",   0x80000, 0x10000, 0xad39a3dd )
  537.     ROM_LOAD_ODD ( "1036.40e",   0x80000, 0x10000, 0x34fc8895 )
  538.  
  539.     ROM_REGION( 0x80000, REGION_CPU2 )    /* 8*64k for 68000 code */
  540.     ROM_LOAD_EVEN( "1035.10s",   0x00000, 0x10000, 0xffeb5647 )
  541.     ROM_LOAD_ODD ( "1034.10u",   0x00000, 0x10000, 0xc68f58dd )
  542.  
  543.     ROM_REGION( 0x14000, REGION_CPU3 )    /* 64k + 16k for 6502 code */
  544.     ROM_LOAD( "136069.7b",    0x10000, 0x4000, 0x86e93695 )
  545.     ROM_CONTINUE(             0x04000, 0xc000 )
  546.  
  547.     ROM_REGION( 0x100000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  548.     ROM_LOAD( "136069.47s",   0x00000, 0x10000, 0x0de9d98d )
  549.     ROM_LOAD( "136069.43s",   0x10000, 0x10000, 0x8eb106ad )
  550.     ROM_LOAD( "136069.38s",   0x20000, 0x10000, 0xbf3d0e18 )
  551.     ROM_LOAD( "136069.32s",   0x30000, 0x10000, 0x48fb2e42 )
  552.     ROM_LOAD( "136069.76s",   0x40000, 0x10000, 0x602d939d )
  553.     ROM_LOAD( "136069.70s",   0x50000, 0x10000, 0xf6c973af )
  554.     ROM_LOAD( "136069.64s",   0x60000, 0x10000, 0x9cd52e30 )
  555.     ROM_LOAD( "136069.57s",   0x70000, 0x10000, 0x4e2c2e7e )
  556.     ROM_LOAD( "136069.47u",   0x80000, 0x10000, 0xe7edcced )
  557.     ROM_LOAD( "136069.43u",   0x90000, 0x10000, 0x9d3e144d )
  558.     ROM_LOAD( "136069.38u",   0xa0000, 0x10000, 0x23f40437 )
  559.     ROM_LOAD( "136069.32u",   0xb0000, 0x10000, 0x2a47ff7b )
  560.     ROM_LOAD( "136069.76u",   0xc0000, 0x10000, 0xb0cead58 )
  561.     ROM_LOAD( "136069.70u",   0xd0000, 0x10000, 0xfbc3934b )
  562.     ROM_LOAD( "136069.64u",   0xe0000, 0x10000, 0x0e07493b )
  563.     ROM_LOAD( "136069.57u",   0xf0000, 0x10000, 0x34f8f0ed )
  564.  
  565.     ROM_REGION( 0x04000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  566.     ROM_LOAD( "1360691.25d",  0x00000, 0x04000, 0x409d818e )
  567. ROM_END
  568.  
  569.  
  570.  
  571. /*************************************
  572.  *
  573.  *    Driver initialization
  574.  *
  575.  *************************************/
  576.  
  577. static void init_eprom(void)
  578. {
  579.     atarigen_eeprom_default = NULL;
  580.     atarijsa_init(2, 6, 1, 0x0002);
  581.  
  582.     /* speed up the 6502 */
  583.     atarigen_init_6502_speedup(2, 0x4158, 0x4170);
  584.  
  585.     /* display messages */
  586.     atarigen_show_sound_message();
  587.  
  588.     rom_decode();
  589. }
  590.  
  591.  
  592.  
  593. /*************************************
  594.  *
  595.  *    Game driver(s)
  596.  *
  597.  *************************************/
  598.  
  599. GAME( 1989, eprom,  0,     eprom, eprom, eprom, ROT0, "Atari Games", "Escape from the Planet of the Robot Monsters (set 1)" )
  600. GAME( 1989, eprom2, eprom, eprom, eprom, eprom, ROT0, "Atari Games", "Escape from the Planet of the Robot Monsters (set 2)" )
  601.